import java.util.*;
import java.util.zip.*;
import java.io.*;

/** Extraction pour remplacement
  * d'un fichier zippé du patch
  *
  * @author     Nemesis (nemesis_tt@yahoo.fr)
  * @version    25/05/04
  */
 
public class Modif_Extr extends Modif
{
    /** Nom du fichier */
    private String fich;

    /** Constructeur */
    public Modif_Extr(String fich_)
    {
        super();
        fich = fich_;
    }
    
    public String toString()
    {
        return "Extraction du fichier " + fich;
    }
    
    public void appliquer()
    {   
        final int BUFFER = 2048;
        // Recherche du fichier associé
        try {
            String nom = base_dir + "/" + fich;
            BufferedInputStream in =
                new BufferedInputStream(patch.get(nom));
            if (in==null)
                Logueur.loguer(this,Logueur.ERROR_FILE);
            else {
                File f = new File(nom.replace('/',File.separatorChar));
                f.getParentFile().mkdirs();
                
                // Ouvrir le fichier de sortie (écrasement en théorie)
                BufferedOutputStream out = new BufferedOutputStream(
                    new FileOutputStream(f));
                // Déziper le fichier
                int lu=-1;
                byte[] tampon = new byte[BUFFER];
                do {
                    lu = in.read(tampon);
                    if(lu > 0)
                        out.write(tampon,0,lu);
                } while(lu > 0);
                // Fermer le fichier à déziper
                out.close();
                Logueur.loguer(this,Logueur.ERROR_NONE);
            }
        } catch (Exception e) {
            Logueur.loguer_texte(e.toString());
        }
    }
}